import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.math.Vector3;

/**
 * MenuType Interface
 * used to connect different types of menu's to the menuScreen
 * 
 * @author Zong Xiong
 */
public interface MenuType {
	
/***************************************************
 * Public Methods
 ***************************************************/
	
	/**
	 * draw
	 * Draws menu's button and text to batch
	 * 
	 * @param batch, where to draw to
	 * @param inactiveButton, texture for inactive buttons
	 * @param activeButton, texture for active button
	 * @param textBar, texture for text bar
	 * @param grayBar, texture for a gray box
	 * @param menuFont, font for menu button
	 * @param textFont, font for text bar
	 */
	public void draw(SpriteBatch batch, TextureRegion inactiveButton, TextureRegion activeButton, TextureRegion textBar,
			TextureRegion grayBar, BitmapFont menuFont, BitmapFont textFont);
	
	/**
	 * getPreviousMenu
	 * retrieves parent menu
	 * 
	 * @return parent menu
	 */
	public MenuType getPreviousMenu();
	
	/**
	 * getMenuOption
	 * depending on pointer position, we return the corresponding menu
	 * 
	 * @param pointer, pointer of touched point
	 * @return child menu corresponding to touched point
	 */
	public MenuType getMenuOption(Vector3 pointer);
	
	/**
	 * setVisibility
	 * turns the visibility of the menu on and off
	 * 
	 * @param visibility, true for visible
	 */
	public void setVisible(boolean visibility);
	
	/**
	 * isVisible
	 * retrieves wither the menu is visible
	 * 
	 * @return true if visible
	 */
	public boolean isVisible();

}
